import secrets

from otree.api import *

from gambler_fallacy_kline import rising5, falling5, rising7, rising10, falling7, falling10

# import falling5
# import rising5

doc = """
赌徒谬误听取意见组
"""


class C(BaseConstants):
    NAME_IN_URL = 'gfka'
    PLAYERS_PER_GROUP = None
    NUM_ROUNDS = 10
    RANDOM_TEXTS = [
        "我的经验是该股票会持续上涨。",
        "我的经验是该股票会持续下跌。",
        "我建议持有股票更长时间。",
        "我建议减持或卖出该股票。",
        "我的经验是该股票会有很大的收益。",
        "我的经验是该股票会有很大的亏损。",
        "看股票的趋势，我认为会有很大的收益。",
        "看股票的趋势，我认为会有很大的亏损。",
        "我建议加仓或买入该股票。",
        "我建议平仓或卖出该股票。",
        "根据我的经验，该股票未来可能会有较好的表现。",
        "我认为该股票目前的价格已经偏高，建议谨慎。",
        "该股票的价格看起来不错，建议关注。",
        "该股票近期波动较大，建议不要轻易买入。",
        "该股票的价格表现一直很稳定，值得长期持有。",
        "该股票目前价格较高，建议等待更好的买入时机。",
        "该股票的关注度很高，可能会有进一步的上涨空间。",
        "该股票的波动性较大，建议投资者谨慎操作。",
    ]
    TABLE_STYLE = """
<style>
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0; /* 适当减小表格的上下外边距，更适合手机布局 */
            font-family: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif; /* 选择适合中文显示的字体 */
            min-width: 280px; /* 减小最小宽度，适应手机屏幕 */
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 调小阴影范围 */
        }

        th {
            background-color: #f2f2f2;
            color: #333;
            text-align: left;
            padding: 10px 12px; /* 适当减小内边距，节省空间 */
            font-size: 16px; /* 设置适合手机阅读的字体大小 */
        }

        caption {
            padding: 8px; /* 减小标题内边距 */
            caption-side: bottom;
            color: #777;
            font-size: 14px; /* 调整标题字体大小 */
            margin-top: 8px;
        }

        td {
            padding: 10px 12px; /* 适当减小内边距，节省空间 */
            text-align: left;
            font-size: 14px; /* 设置适合手机阅读的字体大小 */
        }

        tr:nth-child(even) td {
            background-color: #f2f2f2;
        }

        tr:nth-child(odd) td {
            background-color: #fff;
        }

        tr:hover td {
            background-color: #e9f3ff;
        }

        th,
        td {
            border: 1px solid #e0e0e0;
        }
        /* 专家意见样式 */
       .expert-opinion {
            background-color: #f9f9f9; /* 浅灰色背景，与表格区分又协调 */
            border: 1px solid #ddd; /* 灰色边框 */
            padding: 15px; /* 内边距，让内容与边框有一定距离 */
            margin: 20px 0; /* 上下外边距，与其他内容分隔开 */
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* 轻微阴影，增加立体感 */
            font-family: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif; /* 与表格字体一致 */
            font-size: 16px; /* 字体大小 */
            line-height: 1.6; /* 行高，使文本更易读 */
            color: #333; /* 文本颜色 */
        }

       .expert-opinion::before {
            content: "专家意见："; /* 在专家意见前添加标识 */
            font-weight: bold;
            color: #007BFF; /* 标识颜色与左侧边框一致 */
        }
    </style>
"""


TREND_UP, TREND_DOWN = '上涨', '下跌'
YES, NO = "是", "否"
LABEL_PIC_CURRENT_TREND = '当前股票价格走势'
LABEL_PIC_NEXT_TREND = '下个交易日股票涨跌情况'
LABEL_PIC_NEXT_TREND2 = '下个交易日股票涨跌情况'


class Subsession(BaseSubsession):
    pass


class Group(BaseGroup):
    pass


class Player(BasePlayer):
    gf_up_curr = models.StringField(choices=[TREND_UP, TREND_DOWN], label=LABEL_PIC_CURRENT_TREND,
                                    widget=widgets.RadioSelectHorizontal)

    gf_up_next = models.StringField(choices=[TREND_UP, TREND_DOWN], label=LABEL_PIC_NEXT_TREND,
                                    widget=widgets.RadioSelectHorizontal)

    gf_dw_curr = models.StringField(choices=[TREND_UP, TREND_DOWN], label=LABEL_PIC_CURRENT_TREND,
                                    widget=widgets.RadioSelectHorizontal)

    gf_dw_next = models.StringField(choices=[TREND_UP, TREND_DOWN], label=LABEL_PIC_NEXT_TREND,
                                    widget=widgets.RadioSelectHorizontal)

    random_text = models.StringField()


rising_data = rising5.DATA
rising_data.extend(rising7.DATA)
rising_data.extend(rising10.DATA)

falling_data = falling5.DATA
falling_data.extend(falling7.DATA)
falling_data.extend(falling10.DATA)


def get_random_data(data_list):
    return secrets.choice(data_list)


def get_random_text():
    return secrets.choice(C.RANDOM_TEXTS)


class KLineChartUp(Page):
    form_model = 'player'
    form_fields = ['gf_up_curr', 'gf_up_next']

    def vars_for_template(self):
        # 使用rising5.DATA数据进行解析，并随机选择一组
        selected_data = get_random_data(rising_data)

        return {
            'stock_data': selected_data,
            'num_days': len(selected_data),
            'random_text': get_random_text()
        }


class KLineChartDown(Page):
    form_model = 'player'
    form_fields = ['gf_dw_curr', 'gf_dw_next']

    def vars_for_template(self):
        # 使用falling5.DATA数据进行解析，并随机选择一组
        selected_data = get_random_data(falling_data)

        return {
            'stock_data': selected_data,
            'num_days': len(selected_data),
            'random_text': get_random_text()
        }


page_sequence = [
    # Start,
    KLineChartUp,
    KLineChartDown
]
